/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tds.server;

import edu.uoc.tds.bean.CentroDocente;
import edu.uoc.tds.bean.Contacto;
import edu.uoc.tds.bean.Universidad;
import edu.uoc.tds.common.UtilLenguaje;
import edu.uoc.tds.common.Utils;
import edu.uoc.tds.common.Variables;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import javax.swing.JOptionPane;

public class GestorCentroDocente {

    private Connection conn = null;
    private UtilLenguaje txt = null;
    private GestorSubTablas gS=null;

    public GestorCentroDocente(Connection conn) {
        this.conn = conn;
    }

    public CentroDocente getCentroDocente(Integer idCentroDocente) throws Exception {
        CentroDocente centroDocente = null;
        Universidad universidad;
        Contacto contacto;
        ResultSet rs = null;
        PreparedStatement ps = null;

        try {

            gS=new GestorSubTablas(getConnection());
            
            String sSQL = "SELECT nombre, id_contacto, id_universidad, estado, fecha_alta, "
                    + " fecha_estado, motivo_estado ";
            sSQL += " FROM centrodocente ";
            sSQL += " where id_centro=? ";

            ps = getConnection().prepareStatement(sSQL);
            ps.setInt(1, idCentroDocente);

            rs = ps.executeQuery();

            if (rs.next()) {
                String nombre = rs.getString("nombre");
                String estado = rs.getString("estado");
                Date fechaAlta = rs.getDate("fecha_alta");
                Integer idUniversidad = new Integer(rs.getInt("id_universidad"));
                Integer idContacto = new Integer(rs.getInt("id_contacto"));
                Date fechaEstado = rs.getDate("fecha_estado");
                String motivoEstado = rs.getString("motivo_estado");     
                universidad = gS.getUniversidad(idUniversidad);
                contacto = gS.getContacto(idContacto);
                centroDocente = new CentroDocente(idCentroDocente, nombre, estado, fechaAlta, universidad, contacto, fechaEstado, motivoEstado);
            }

        } catch (SQLException eSQL) {
            eSQL.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("err.gestorCentro.bbdd") + "\n" + eSQL.getMessage(),
                    txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } catch (Exception eE) {
            eE.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("err.gestorCentro.generico") + "\n" + eE.getMessage(),
                    txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return centroDocente;
    }

    public Vector<CentroDocente> listaCentrosUniversidad(Integer idUniversidad) throws Exception {
        Vector<CentroDocente> vV = new Vector<CentroDocente>();
        ResultSet rs=null;
        PreparedStatement ps = null;
        try {
            String sSQL = "SELECT id_centro, nombre ";
            sSQL += " FROM centrodocente ";

            
            sSQL += " WHERE id_universidad = "+ idUniversidad;
            

            sSQL += " ORDER BY nombre ";

            ps = getConnection().prepareStatement(sSQL);
          //  ps.setInt(1, idUniversidad.intValue());
            rs = ps.executeQuery();
            while (rs.next()) {
                Integer idCentro = new Integer(rs.getInt("id_centro"));
                String descripcion = rs.getString("nombre");

                CentroDocente centro = new CentroDocente(idCentro, descripcion);
                vV.add(centro);
            }

        } catch (SQLException eSQL) {
            eSQL.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    UtilLenguaje.getMessage("err.gestorCentro.bbdd") + "\n" + eSQL.getMessage(),
                    UtilLenguaje.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } catch (Exception eE) {
            eE.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    UtilLenguaje.getMessage("err.gestorCentro.generico") + "\n" + eE.getMessage(),
                    UtilLenguaje.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        }finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return vV;
    }


    public Connection getConnection() {
        return conn;
    }



     public List<CentroDocente> listaConsultaCentros(Integer idUniversidad, String nombre, Integer estado) throws Exception {
        List<CentroDocente> vV = new ArrayList();
        ResultSet rs=null;
        PreparedStatement ps = null;
        try {
            String sSQL = "SELECT id_centro ";
            sSQL += " FROM centrodocente ";
            sSQL += " WHERE  nombre  like ? ";

             if (idUniversidad !=0){
                sSQL += " AND id_universidad = "+idUniversidad;
            }
            

            if (!Utils.isEmpty(estado)){
               sSQL += " AND  estado  =  "+estado;
            }
           
            sSQL += " ORDER BY nombre ";

            ps = getConnection().prepareStatement(sSQL);
            ps.setString(1, "%"+nombre+"%");

            rs = ps.executeQuery();
            while (rs.next()) {
                CentroDocente centro = this.getCentroDocente(rs.getInt("id_centro"));
                vV.add(centro);
            }

        } catch (SQLException eSQL) {
            eSQL.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    UtilLenguaje.getMessage("err.gestorCentro.bbdd") + "\n" + eSQL.getMessage(),
                    UtilLenguaje.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } catch (Exception eE) {
            eE.fillInStackTrace();
            JOptionPane.showMessageDialog(null,
                    UtilLenguaje.getMessage("err.gestorCentro.generico") + "\n" + eE.getMessage(),
                    UtilLenguaje.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        }finally {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        return vV;
    }



     
     public void altaCentro(String nombre, Integer idUniversidad,
            Integer idContacto) throws Exception {

        PreparedStatement ps = null;
        try {

            String sSQL = "INSERT INTO CENTRODOCENTE (nombre, id_universidad, "
                    + "id_contacto, estado, fecha_alta) "
                    + " VALUES (?,?,?,?,?)";

            ps = getConnection().prepareStatement(sSQL);

            ps.setString(1, nombre);
            ps.setInt(2, idUniversidad);
            ps.setInt(3, idContacto);
            ps.setInt(4, Variables.estadoActivo);
            java.sql.Date sqlFechaAlta = new java.sql.Date(new Date().getTime());
            ps.setDate(5, sqlFechaAlta);
          
            ps.execute();
            this.getConnection().setAutoCommit(true);
           
        } catch (SQLException eSQL) {
            if (eSQL.getSQLState().equals(GestorDisco.SQL_STATE_UNIQUE_VIOLATION)) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("err.gestorCentro.constraint") + "\n" + eSQL.getMessage(),
                        txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("err.gestorCentro.bbdd") + "\n" + eSQL.getMessage(),
                        txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception eE) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("err.gestorCentro.generico") + "\n" + eE.getMessage(),
                    txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } finally {

            if (ps != null) {
                ps.close();
            }
        }
    }


     public void editarCentro(Integer idCentro, String nombre, Integer idUniversidad,
            Integer idContacto, Integer estado, String motivo, String fechaBaja) throws Exception {

        PreparedStatement ps = null;
        SimpleDateFormat sD= new SimpleDateFormat("dd/mm/yyyy");
        java.sql.Date sqlFechaBaja=null;
        try {

            String sSQL = "UPDATE CENTRODOCENTE set nombre=?, id_universidad=? , id_contacto=?, "
                    + "estado=?, motivo_estado=?, fecha_estado=? "
                    + " WHERE id_centro=? ";

            ps = getConnection().prepareStatement(sSQL);

            ps.setString(1, nombre);
            ps.setInt(2, idUniversidad);
            ps.setInt(3, idContacto);
            ps.setInt(4, estado);
            ps.setString(5, motivo);
            if (!Utils.isEmpty(fechaBaja)){
                sqlFechaBaja = new java.sql.Date(sD.parse(fechaBaja).getTime());
            }
            ps.setDate(6,sqlFechaBaja);
            ps.setInt(7, idCentro);
            ps.execute();
            this.getConnection().setAutoCommit(true);

        } catch (SQLException eSQL) {
            if (eSQL.getSQLState().equals(GestorDisco.SQL_STATE_UNIQUE_VIOLATION)) {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("err.gestorCentro.constraint") + "\n" + eSQL.getMessage(),
                        txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(null,
                        txt.getMessage("err.gestorCentro.bbdd") + "\n" + eSQL.getMessage(),
                        txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception eE) {
            JOptionPane.showMessageDialog(null,
                    txt.getMessage("err.gestorCentro.generico") + "\n" + eE.getMessage(),
                    txt.getMessage("err.gestorCentro"), JOptionPane.ERROR_MESSAGE);
        } finally {

            if (ps != null) {
                ps.close();
            }
        }
    }
}
